import time
from astropy.time import Time
from astropy.coordinates import EarthLocation, get_sun
from astroplan import Observer
import astropy.units as u
from pytz import timezone

# 设置观测地点（Gaomeigu Observatory）
longitude = "+100d01m52.68s"
latitude = "+26d41m50.64s"
elevation = 3200.0 * u.m

# 创建 EarthLocation 对象
location = EarthLocation.from_geodetic(longitude, latitude, elevation)

# 创建 Observer 对象
observer = Observer(name="Mephisto Telescope",
                    location=location,
                    pressure=0.7 * u.bar,
                    relative_humidity=0.60,
                    temperature=2.0 * u.deg_C,
                    timezone=timezone("Asia/Shanghai"),
                    description="Mephisto at Gaomeigu Observatory")

def get_sun_altitude(current_time: Time) -> float:
    """
    获取指定时间的太阳高度角（单位：度）
    使用 get_sun() 替代 SkyCoord.from_name('Sun')，避免依赖网络服务
    """
    sun_coord = get_sun(current_time)  # 获取太阳的坐标
    altaz = observer.altaz(current_time, sun_coord)  # 计算 AltAz 坐标
    return altaz.alt.deg

def aaa_program():
    """
    AAA 程序的执行体（可替换为你自己的程序逻辑）
    """
    print("✅ AAA 程序已启动！")
    # 在这里添加你想要执行的代码
    # 例如：启动观测任务、调用外部脚本等

def wait_until_sun_altitude_below_threshold(threshold=-9):
    """
    持续等待，直到太阳高度角 ≤ threshold 度
    """
    print("🌞 开始监控太阳高度角...")
    while True:
        current_time = Time.now()  # 获取当前 UTC 时间
        sun_altitude = get_sun_altitude(current_time)

        print(f"🕒 当前 UTC 时间: {current_time.iso}")
        print(f"☀️  当前太阳高度角: {sun_altitude:.2f}°")

        if sun_altitude <= threshold:
            print(f"🎉 条件满足，太阳高度角 ≤ {threshold}°")
            aaa_program()
            break
        else:
            print("⏳ 条件未满足，等待 10 分钟后重试...\n")
            time.sleep(600)  # 等待 10 分钟（600 秒）

if __name__ == "__main__":
    wait_until_sun_altitude_below_threshold()